#ifndef FUNCIONESFAT32_H_
#define FUNCIONESFAT32_H_

#include <stdint.h>
#include <stdbool.h>
#include "listas.h"
#include "utils.h"
#include "log.h"

t_fs *cargar_fs(int32_t);
int32_t fat32_cargar_entradas(t_fs* , uint32_t , Tentrada*,int32_t);
void leerElemento(t_entrada*, t_elemento *, char *, uint16_t );
int32_t ObtenerEntradaLibre(t_fs* , char *, uint32_t* , int32_t);
void crear_entrada_longname(char*, char* , int32_t );
int32_t cargarNombre(char*, char*, char*, uint16_t);
int32_t obt_direccion_cluster(t_fs*, int32_t);
void AgregarCluster(t_fs* , t_elemento*,uint16_t,char*,int32_t);
void AsignaPrimerCluster( t_fs *  , t_elemento * , int32_t,char*, int32_t);
void QuitarClusters(t_fs *, t_elemento *,uint16_t ,char*,int32_t);
void CambiarTamanioArch(t_fs*, t_elemento*, int32_t,char*,int32_t);
uint32_t ObtenerSgteCluster(t_fs *, uint32_t );
t_elemento *obtener_elem(t_fs * ,char *, Tentrada**);
t_elemento *obt_elem_aux(Tentrada *,char **, Tentrada**);
bool resize_arch(t_fs * , t_elemento * , uint32_t ,int32_t  );
size_t leer_arch(t_fs * , t_elemento * , char* , off_t , size_t ,int32_t);
int32_t remover_arch(t_fs *, char *,int32_t );
bool escribir_arch(t_fs *, t_elemento *, char* , off_t , size_t , int32_t );
Tentrada *listarDir(t_fs *,char *);
void crear_arch(t_fs *, char *, int32_t);
int32_t cantClusters(t_fs *, t_elemento *);
uint32_t cantClustersLibres(t_fs *);
uint32_t ObtenerUnClusLibre(t_fs*, int32_t*);

//unsigned char lfn_checksum(const unsigned char *);



void grabar_cache(t_cache * );
void imprimir_cabecera(FILE *);
void cache_dump1 (Tentrada* );



#endif
